2. 필드 옮기기
필드를 한 곳에서 다른 곳으로 이동
즉, 데이터 구조의 변경
아래 목록에서 "레코드"는 "클래스"나 "객체"로 치환 가능
- 함수에 어떤 레코드를 넘길 때 마다 또 다른 레코드의 필드도 함께 넘기고 있을 때
- 한 레코드를 변경하는데 다른 레코드의 필드까지 변경해야 할 때
- 구조체 여러 개에 정의된 똑같은 필드들을 갱신해야 할 때
절차
- 소스 필드가 캡슐화되어 있지 않다면 캡슐화한다.
- 테스트한다.
- 타깃 객체에 필드(와 접근자 메서드들)을 생성한다.
- 정적 검사를 수행한다.
- 소스 객체에서 타깃 객체를 참조할 수 있는지 확인한다.
- 접근자들이 타깃 필드를 사용하도록 수정한다.
- 테스트한다.
- 소스 필드를 제거한다.
- 테스트한다.
예시 코드
😞 Before
class Customer {
get plan() {
return this._plan;
}
get discountRate() {
returh this._discountRate
}
}
😃 After
class Customer {
get plan() {
return this._plan;
}
get discountRate() {
returh this.plan.discountRate
}
}